package edu.ustb.aur.moldpackage;

import edu.ustb.aur.assetpackage.Asset;
import edu.ustb.aur.myenum.MoldEnum;
import edu.ustb.aur.myenum.RightEnum;
import edu.ustb.aur.rightpackage.AbstractRight;

import java.util.*;

/**
 * @author ShiZhe
 * @create 2022-01-06 10:02
 * 货币资产作为特殊的资产，没有无形或者有形资产的6大操作。
 * 当货币资产进行注册时，就相当于增加了用户属性中余额，目前余额的单位均是RMB。
 * 货币资产只有一种占有权
 */
public class CurrencyMold extends AbstractMold {

    /**
     * 默认构造函数
     */
    public CurrencyMold() {
        // 调用父类默认构造函数
        super();
        type = "CURRENCY_MOLD";
    }

    /**
     * 含参构造函数
     *
     * @param moldMap
     *            资产对象与权利对象的映射
     */
    public CurrencyMold(HashMap<RightEnum, AbstractRight> moldMap, double threshold) {
        // 调用父类含参构造函数
        super(moldMap, threshold);
        type = "CURRENCY_MOLD";
    }

    /**
     * 售卖操作，判断各权利是否均操作阈值，符合条件就执行。同意者的rightMap各权利之和超过阈值，强制执行此操作，原权利映射注销，新的权利映射建立 规定了售卖操作需要具有的权利，规定了售卖操作需要完成的权利转移
     * 目前假定进行售卖操作，需要具有收益权，占有权，处分权，并且其具有的比例操作阈值
     *
     * @param moldMap    资产对象与权利对象的映射hashMap
     * @param froms      调用此操作的同意者数组
     * @param toRightMap 此操作执行成功后，接收者的分配rightMap
     * @return true or false
     */
    @Override
    public boolean sell(HashMap<RightEnum, AbstractRight> moldMap, String[] froms, HashMap<String, Double> toRightMap) {
        return false;
    }

    @Override
    public boolean leaseReturn(HashMap<RightEnum, AbstractRight> moldMap, String[] froms, HashMap<String, Double> toRightMap) {
        return false;
    }

    /**
     * 租赁操作，判断各权利是否均操作阈值，符合条件就执行。
     *
     * @param moldMap    资产对象与权利对象的映射hashMap
     * @param froms      调用此操作的同意者数组
     * @param toRightMap 此操作执行成功后，接收者的分配rightMap
     * @return true or false
     */
    @Override
    public boolean lease(HashMap<RightEnum, AbstractRight> moldMap, String[] froms, HashMap<String, Double> toRightMap) {
        return false;
    }

    /**
     * 抵押操作，判断各权利是否均操作阈值，符合条件就执行。
     *
     * @param moldMap    资产对象与权利对象的映射hashMap
     * @param froms      调用此操作的同意者数组
     * @param toRightMap 此操作执行成功后，接收者的分配rightMap
     * @return true or false
     */
    @Override
    public boolean mortgage(HashMap<RightEnum, AbstractRight> moldMap, String[] froms, HashMap<String, Double> toRightMap) {
        return false;
    }

    /**
     * 馈赠操作，判断各权利是否均操作阈值，符合条件就执行。
     *
     * @param moldMap    资产对象与权利对象的映射hashMap
     * @param froms      调用此操作的同意者数组
     * @param toRightMap 此操作执行成功后，接收者的分配rightMap
     * @return true or false
     */
    @Override
    public boolean gift(HashMap<RightEnum, AbstractRight> moldMap, String[] froms, HashMap<String, Double> toRightMap) {
        return false;
    }


    /**
     * 销毁操作，判断各权利是否均操作阈值，符合条件就执行。
     *
     * @param moldMap 资产对象与权利对象的映射hashMap
     * @param froms   调用此操作的同意者数组
     * @return true or false
     */
    @Override
    public boolean destroy(HashMap<RightEnum, AbstractRight> moldMap, String[] froms) {
        return false;
    }

    /**
     *
     * @param assetId
     *            资产id
     * @param froms
     *            调用此操作的同意者数组
     * @param asset
     *            资产对象
     * @param moldMap
     *            资产对象与权利对象的映射hashMap
     * @return
     */
    @Override
    public boolean update(String assetId, String[] froms, Asset asset, HashMap<RightEnum, AbstractRight> moldMap) {
        return false;
    }

    /**
     * 各操作规则需要的权利集合定义
     *
     * @param operateType 资产的操作方法
     * @return 所需要的权利集合
     */
    @Override
    public List<RightEnum> operateTypeRightList(MoldEnum operateType) {
        return null;
    }

}
